﻿/******************************************************************************
* File description: animationParseHEX.h
* Function: 解析下位机指令，并分发给动画Manager
* Current Version: 1.0.0
* Author: JNN
* Date: 2025-07-01
*  -----
*  Copyright by 博坤生物 .
 *****************************************************************************/

#ifndef ANIMATIONPARSEHEX_H
#define ANIMATIONPARSEHEX_H

#include <QTimer>
#include "animationState_Purify.h"
#include "animationState_Shifting.h"
#include "animationState_Practice.h"
#include "CommonHelper.h"
#include "logHelper/debugLog.h"
#include "syringeCalculator.h"
#include "animationStateRescue.h"

extern QString expConsumablesType;

// 解析设备的指令，操作动画
class AnimationParseHEX
{
private:
    AnimationParseHEX();

public:
    static AnimationParseHEX& I();

    void initState(AnimationState_Shifting* state_shifting, AnimationState_Practice* state_practice, AnimationState_Purify* state_purify);

    bool parse(QStringList instruct, int type=0);   // type=0:上位机发的指令  type=1:设备发的指令
    bool parseErrorMsg(QStringList instruct);

    bool startParsing(QStringList instruct);

    // 纯化
    bool parsingSyringe(QStringList instruct);      // 1
    bool parsingValve(QStringList instruct);        // 2
    bool parsingWheel(QStringList instruct);        // 3
    bool parsingHatPush(QStringList instruct);      // 4
    bool parsingHatPress(QStringList instruct);
    bool parsingPeristalticPump_Purify(QStringList instruct);     // 5 纯化往废液瓶打的蠕动泵
    bool parsingMotor(QStringList instruct);



    // 放靶/转靶
    bool parsingBaffle(QStringList instruct);                     // 20 挡板
    bool parsingPushPump_Shifting(QStringList instruct);          // 21 放靶往打靶吹的气泵
    bool parsingAbsorb_Practice(QStringList instruct);            // 22 吸靶
    bool parsingWaterPump(QStringList instruct);                  // 23 水泵
    bool parsingAirPump(QStringList instruct);                    // 24 气泵
    bool parsingMoveTarget_Practice(QStringList instruct);        // 25 加速模块移靶和送靶
    bool parsingBrake(QStringList instruct);                      // 26 抱闸（锁定）
    bool parsingMoveFeedPort_Practice(QStringList instruct);      // 27 加速模块进料口上移和下移
    bool parsingPushPump_Practice(QStringList instruct);          // 28 加速往转靶吹的气泵
    bool parsingOpCap_Mov(QStringList instruct);                  // 29 旋盖
    bool parsingOpTarget_Practice(QStringList instruct);          // 2A 转靶模块取靶和放靶
    bool parsingClamp(QStringList instruct);                      // 2B 夹爪
    bool parsingPeristalticPump_Shifting(QStringList instruct);   // 2C 转靶往纯化打的蠕动泵
    bool parsingHeating(QStringList instruct);                    // 2E 纯化加热
    bool parsingOpCap_Clamp(QStringList instruct);                // 30 旋盖夹爪




    QString     _lastInstruction;       // 用于处理不知道什么原因造成的同一条指令发了两次的情况

    AnimationState_Purify*      _state_purify = nullptr;
    AnimationState_Practice*    _state_practice = nullptr;
    AnimationState_Shifting*    _state_shifting = nullptr;

    QMap<QString, QString>   _historyInstruct;     // 记录每个步骤都是什么类型的，用于判断设备返02的时候执行什么操作。这里步骤号也用16进制字符串了。

};

#endif  // ANIMATIONPARSEHEX_H
